﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using com.clinica.business.BE.gesliq;
using LiclUtil;
using LiclGesLiq.Views;
using System.Text;

namespace wesiGestClinica.gesliq
{
    public partial class FormsManGestionLiquidacion : Shared.SMGPaseBase, ILiclGestionLiquidacion
    {
        private LiclGestionLiquidacionPresenter oPresenter = new LiclGestionLiquidacionPresenter();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                oPresenter.View = this;
                this.Master.TituloModulo = "Gestión de Liquidaciones";
                CargarTipoDocumento();
                IniciarControles();
                CargarUrl();
                //EstablecerModos(0);
            }
            Master.OcultarMensaje();
            oPresenter.View = this;
        }
        protected override void DefineHandlers()
        {
            img_Buscar.Click += new ImageClickEventHandler(img_Buscar_Click);
            img_Buscar.Attributes.Add("onClick", "abrirPopupPaciente();");

            UCBarra1.img_Grabar.Click += new ImageClickEventHandler(img_Grabar_Click);
            UCBarra1.img_Grabar.Attributes.Add("onClick", "if(!window.confirm(' Desea Guardar Liquidación'))return false;");
            UCBarra1.img_Volver.Click += new ImageClickEventHandler(img_Volver_Click);
            UCBarra1.img_Grabar.Visible = true;
            UCBarra1.img_Volver.Visible = true;

            btn_Actualizar.Click += new EventHandler(btn_Actualizar_Click);
            btn_Aprobar.Click += new EventHandler(btn_Aprobar_Click);
            btn_Aprobar.Attributes.Add("onClick", "if(!window.confirm(' Desea Aprobar Liquidación'))return false;");

            btn_Rechazar.Click += new EventHandler(btn_Rechazar_Click);
            btn_Rechazar.Attributes.Add("onClick", "if(!window.confirm(' Desea Rechazar la Liquidación'))return false;"); 
        
        }

        #region Eventos
        void btn_Aprobar_Click(object sender, EventArgs e)
        {
            string TipoLiq = Request.QueryString["TipoLiq"].ToString().Trim();
            string Num = Request.QueryString["Num"].ToString().Trim();
            try
            {
                LiquidacionBE oLiq = new LiquidacionBE();
                oLiq.TipoLiquidacion = int.Parse(TipoLiq);
                oLiq.Numero = int.Parse(Num);
                
                oLiq.Observacion = txt_Observaciones.Text.Trim();

                oPresenter.onAprobar_Liquidaciones(oLiq);
                CargarUrl();

                string Msg = "La Liquidación" + " Nro." + Num + " fue aprobada exitosamente";        
                ScriptManager.RegisterStartupScript(this, typeof(Page), "Envionnn", "Mostrarmensaje('"+ Msg +"');", true); 

//                ScriptManager.RegisterStartupScript(this, typeof(Page), "Envio", "Mostrarmensaje('Se Actualizó la " + rbl_TipoDocumento.SelectedValue == "1" ? "Pre-liquidación" : "Liquidación" + " Nro." + Num + "');", true);
                btn_Aprobar.Enabled = false;
                btn_Rechazar.Enabled = false;
            }
            catch (Exception)
            {
            }
        }


        void btn_Rechazar_Click(object sender, EventArgs e)       
        {        
            string TipoLiq = Request.QueryString["TipoLiq"].ToString().Trim();        
            string Num = Request.QueryString["Num"].ToString().Trim();        
            try        
                {        
                LiquidacionBE oLiq = new LiquidacionBE();        
                if (txt_Observaciones.Text.Trim() == string.Empty)        
                    throw new Exception("Debe ingresar el motivo del rechazo en observaciones");        
                else        
                  oLiq.Observacion = txt_Observaciones.Text.Trim();        
                  oLiq.TipoLiquidacion = int.Parse(TipoLiq);        
                  oLiq.Numero = int.Parse(Num);        
                  oLiq.Observacion = txt_Observaciones.Text.Trim();        
                  oPresenter.onRechazar_Liquidaciones(oLiq);      
                  CargarUrl();       
                string Msg = "La Liquidación" + " Nro." + Num + " fue rechazada exitosamente";        
                ScriptManager.RegisterStartupScript(this, typeof(Page), "Envionnn", "Mostrarmensaje('" + Msg + "');", true);       
                btn_Aprobar.Enabled = false;        
                btn_Rechazar.Enabled = false;        
            }        
            catch (Exception ex)        
                {        
                    Master.MostrarMensaje(ex.Message, TipoMensaje.Error);        
           }        
      } 

        void btn_Actualizar_Click(object sender, EventArgs e)
        {
            List<OrdenAtencionBE> lst = new List<OrdenAtencionBE>();
            lst = (List<OrdenAtencionBE>)Session["ListaOrdenAtencion"];
            string TipoLiq = Request.QueryString["TipoLiq"].ToString().Trim();
            string Num = Request.QueryString["Num"].ToString().Trim();
            if (lst.Count > 0)
            {
                if (lst[0].FechaCorte <= UC_FechaCorte.value)
                    RecalcularAtenciones(int.Parse(txt_Numero.Text), int.Parse(rbl_TipoDocumento.SelectedValue));
                else
                    Master.MostrarMensaje(" La fecha de corte no puede ser menor a la ya registrada", TipoMensaje.Error);

                EstablecerModos(2);
            }
        }
        void img_Volver_Click(object sender, ImageClickEventArgs e)
        {
//            if (Request.QueryString["action"].ToString().Trim() != string.Empty)
  //          {
    //            if (Request.QueryString["action"].ToString().Trim() != "3")
      //              Response.Redirect("FormsConBandejaLiquidacion.aspx?action=0");
          //      else
        //            Response.Redirect("FormsConBandejaLiquidacion.aspx?action=1");
            //}
            Retornar();
        }
        void img_Grabar_Click(object sender, ImageClickEventArgs e)
        {
            GuardarTemporal();
        }

        void img_Buscar_Click(object sender, ImageClickEventArgs e)
        {
            if ((string)Session["Action"] == "new")
            {
                PacienteBE oPaciente = new PacienteBE();
                oPaciente.TipoBusqueda = 2;
                if (txt_NumeroDoc.Text.Trim() != string.Empty)
                {
                    oPaciente.NumeroDocumento = txt_NumeroDoc.Text.Trim();
                    oPresenter.onBuscar_Paciente(oPaciente);
                    BuscarAtenciones();
                }
            }
            else if ((string)Session["Action"] == "update")
            {

            }
        }
        #endregion
        #region Metodos propios

        private void Retornar()        
        {        
            if (Request.QueryString["action"].ToString().Trim() != string.Empty)        
            {        
                if(Request.QueryString["action"].ToString().Trim()!="3")   
                    Response.Redirect("FormsConBandejaLiquidacion.aspx?action=0");   
                else        
                    Response.Redirect("FormsConBandejaLiquidacion.aspx?action=1");        
        }        
       } 


        private void GuardarTemporal()
        {
            LiquidacionBE oLiq = new LiquidacionBE();
            try
            {
                if (txt_PlanSalud.Text != string.Empty || txt_CiaSeguros.Text != "0")
                    oLiq.EsAsegurado = 1;
                else
                    oLiq.EsAsegurado = 0;
                if ((string)Session["Action"] == "new")
                    oLiq.Accion = 1;
                else if ((string)Session["Action"] == "update")
                    oLiq.Accion = 2;

                if (rbl_TipoDocumento.SelectedValue != string.Empty)
                    oLiq.TipoLiquidacion = int.Parse(rbl_TipoDocumento.SelectedValue);
                else
                    throw new Exception("No existe tipos de documentos válidos");
                if (oLiq.Accion == 2)
                {
                    if (int.Parse(txt_Numero.Text) >= 1000 && int.Parse(txt_Numero.Text) <= 9999)
                        oLiq.Numero = int.Parse(txt_Numero.Text);
                    else
                        throw new Exception("Correlativo documento esta fuera de rango estipulado en configuración");
                }
                if (DateTime.Parse(UC_FechaCorte.TextoFecha.Text).Year >= 1900 && DateTime.Parse(UC_FechaCorte.TextoFecha.Text).Year <= DateTime.Now.Year)
                    oLiq.FechaCorte = DateTime.Parse(DateTime.Parse(UC_FechaCorte.TextoFecha.Text).ToString("dd/MM/yyyy"));
                else
                    throw new Exception("La Fecha de Corte se encuentra fuera de Rango");
                if (DateTime.Compare(DateTime.Parse(UC_FechaCorte.Texto.Trim()), DateTime.Now) > 0)
                {
                    throw new Exception(" La Fecha de Corte se encuentra fuera de Rango,");
                }
                if (DateTime.Parse(UC_FechaEmision.TextoFecha.Text).Year >= 1900 && DateTime.Parse(UC_FechaEmision.TextoFecha.Text).Year <= DateTime.Now.Year)
                    oLiq.FechaEmision = DateTime.Parse(DateTime.Parse(UC_FechaEmision.TextoFecha.Text).ToString("dd/MM/yyyy"));
                else
                    throw new Exception("La Fecha de Emisión se encuentra fuera de Rango");
                if (txt_CodigoPaciente.Text.Trim() == string.Empty)
                    throw new Exception("Debe seleccionar paciente.");
                else
                    oLiq.CodigoPaciente = int.Parse(txt_CodigoPaciente.Text);
                if (!ValidarCarateres(txt_Paciente.Text.Trim(), 0))
                {
                    throw new Exception("El nombre del paciente no puede tener caracteres especiales");
                }
                if (!ValidarCarateres(txt_CiaSeguros.Text.Trim(), 0))
                {
                    throw new Exception("La compañia de seguros no puede tener caracteres especiales");
                }
                if (!ValidarCarateres(txt_Empresa.Text.Trim(), 0))
                {
                    throw new Exception("El nombre de la empresa no puede tener caracteres especiales");
                }
                if (!ValidarCarateres(txt_Poliza.Text.Trim(), 0))
                {
                    throw new Exception("La póliza no puede tener caracteres especiales");
                }
                if (!ValidarCarateres(txt_Observaciones.Text.Trim(), 0))
                {
                    throw new Exception("Las observaciones no puede tener caracteres especiales");
                }
                else
                    oLiq.Observacion = txt_Observaciones.Text.Trim();
                if (!ValidarCarateres(txt_TotalBruto.Text.Trim(), 3))
                {
                    throw new Exception("El Total Bruto debe ser de caracteres numéricos o decimales con punto");
                }
                else
                    oLiq.ImporteBruto = decimal.Parse(txt_TotalBruto.Text);
                if (!ValidarCarateres(txt_TotalNeto.Text.Trim(), 3))
                {
                    throw new Exception("El Total Neto debe ser de caracteres numéricos o decimales con punto");
                }
                else
                    oLiq.ImporteNeto = decimal.Parse(txt_TotalNeto.Text);
                if (!ValidarCarateres(txt_Igv.Text.Trim(), 3))
                {
                    throw new Exception("El Total IGV debe ser de caracteres numéricos o decimales con punto");
                }
                else
                    oLiq.Igv = decimal.Parse(txt_Igv.Text);
                oLiq.Descuento = 0;
                if (!ValidarCarateres(txt_Coaseguro.Text.Trim(), 3))
                {
                    throw new Exception("El Coaseguro debe ser de caracteres numéricos o decimales con punto");
                }
                else
                    oLiq.CostoSeguro = decimal.Parse(txt_Coaseguro.Text);
                if (!ValidarCarateres(txt_Deducibles.Text.Trim(), 3))
                {
                    throw new Exception("El Deducible debe ser de caracteres numéricos o decimales con punto");
                }
                else
                    oLiq.Deducible = decimal.Parse(txt_Deducibles.Text);
                if (!ValidarAtenciones())
                {

                }
                Session["Liquidacion"] = oLiq;
                oPresenter.onMantenimiento_Liquidaciones(oLiq);
            }
            catch (Exception ex)
            {
                Master.MostrarMensaje(ex.Message, TipoMensaje.Error);
            }

        }
        private bool ValidarCarateres(string texto, int tipo)
        {
            bool res = true;
            string validar = string.Empty;
            string cadena = string.Empty;
            string carEspecial = string.Empty;
            if (texto.Trim() != string.Empty)
            {
                switch (tipo)
                {
                    case 0://Alfanumericos no caracteres especiales
                        cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ-0123456789. ";
                        break;
                    case 1://Solo numeros
                        cadena = "-0123456789";
                        break;
                    case 2://Solo Letras
                        cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ ";
                        break;
                    case 3://Solo numeros y decimales
                        cadena = "-0123456789.";
                        break;
                    default:
                        break;
                }
                #region Validacion
                for (int i = 0; i < texto.Length; i++)
                {
                    validar = texto.Substring(i, 1);
                    if (cadena.IndexOf(validar.Trim()) == -1) 
                    {                       
                            res = false;
                        break;
                    }
                }
                #endregion
            }
            else
                res = true;

            return res;
        }
        private bool ValidarAtenciones()
        {
            bool booRes = true;
            List<OrdenAtencionBE> lst = new List<OrdenAtencionBE>();
            lst = (List<OrdenAtencionBE>)Session["ListaOrdenAtencion"];
            if (lst != null)
            {
                if (lst.Count > 0)
                {
                    foreach (OrdenAtencionBE item in lst)
                    {
                        if (!ValidarCarateres(item.OrdenAtencion.ToString(), 1))
                            throw new Exception("En Número de atención debe ser de caracteres numéricos");
                        if (DateTime.Parse(UC_FechaCorte.TextoFecha.Text).Year >= 1900 && DateTime.Parse(UC_FechaCorte.TextoFecha.Text).Year <= DateTime.Now.Year)
                            booRes = true;
                        else
                            throw new Exception("la Fecha de Corte de la lista de atenciones esta fuera de rango");
                        if (!ValidarCarateres(item.CodigoServicio.ToString(), 1))
                            throw new Exception("El Código de Servicio debe ser de caracteres numéricos");
                        //if (!ValidarCarateres(item.Servicio.ToString().Trim(), 0))
                        //    throw new Exception("La descripción del Servicio no debe tener de caracteres especiales");
                        if (!ValidarCarateres(item.Precio.ToString(), 3))
                            throw new Exception("El Precio debe ser de caracteres numéricos o decimales con punto");
                        if (!ValidarCarateres(item.Descuento.ToString(), 3))
                            throw new Exception("El Descuento debe ser de caracteres numéricos o decimales con punto");
                    }
                }
                else
                    throw new Exception("No existen ordenes de atención");
            }
            else
                throw new Exception("No existen ordenes de atención");

                return booRes;
        }
        private void CargarUrl()
        {
            string action = string.Empty;
            string TipoLiq = string.Empty;
            string Num = string.Empty;
            string Est = string.Empty;
            try
            {
                action = Request.QueryString["action"].ToString().Trim();
                TipoLiq = Request.QueryString["TipoLiq"].ToString().Trim();
                Num = Request.QueryString["Num"].ToString().Trim();
            }
            catch (Exception)
            {


            }
            switch (action)
            {
                case "1"://Nuevo
                    Session.Add("Action", "new");
                    EstablecerModos(1);
                    btn_Aprobar.Visible = false;
                    btn_Rechazar.Visible = false;
                    break;
                case "2"://Editar
                    Session.Add("Action", "update");
                    EstablecerModos(2);
                    btn_Aprobar.Visible = false;
                    btn_Rechazar.Visible = false;
                    LiquidacionBE oLiq = new LiquidacionBE();
                    oLiq.Numero = int.Parse(Num);
                    oLiq.TipoLiquidacion = int.Parse(TipoLiq);
                    oPresenter.onObtener_Liquidacion(oLiq);
                    PacienteBE oPa = new PacienteBE();
                    if ((List<OrdenAtencionBE>)Session["ListaOrdenAtencion"] != null)
                    {
                        oPa.Codigo = ((List<OrdenAtencionBE>)Session["ListaOrdenAtencion"])[0].CodigoPaciente;
                        oPresenter.onBuscar_Paciente_porCodigo(oPa);
                        oPresenter.onBuscar_Paciente_Detalle(oPa);
                    }
                    else
                    {
                        EstablecerModos(0);
                    }
                    break;
                case "3"://Aprobar
                    LiquidacionBE oLiq2 = new LiquidacionBE();
                    oLiq2.Numero = int.Parse(Num);
                    oLiq2.TipoLiquidacion = int.Parse(TipoLiq);
                    oPresenter.onObtener_Liquidacion(oLiq2);
                    PacienteBE oPa2 = new PacienteBE();
                    if ((List<OrdenAtencionBE>)Session["ListaOrdenAtencion"] != null)
                    {
                        oPa2.Codigo = ((List<OrdenAtencionBE>)Session["ListaOrdenAtencion"])[0].CodigoPaciente;
                        oPresenter.onBuscar_Paciente_porCodigo(oPa2);
                        oPresenter.onBuscar_Paciente_Detalle(oPa2);
                    }
                    if (Num != string.Empty && TipoLiq != string.Empty)
                    {
                        txt_Numero.Text = Num;
                        rbl_TipoDocumento.SelectedValue = TipoLiq;
                    }
                    EstablecerModos(3);
                    btn_Aprobar.Visible = btn_Rechazar.Visible = true;
                    UCBarra1.img_Grabar.Visible = btn_Actualizar.Visible = false;
                    UCBarra1.img_Volver.Visible = true;
                    //UCBarra1.img_Eliminar.Visible = true;
                    break;
                default://Lectura                     
                    LiquidacionBE oLiq1 = new LiquidacionBE();
                    oLiq1.Numero = int.Parse(Num);
                    oLiq1.TipoLiquidacion = int.Parse(TipoLiq);
                    oPresenter.onObtener_Liquidacion(oLiq1);
                    PacienteBE oPa1 = new PacienteBE();
                    if ((List<OrdenAtencionBE>)Session["ListaOrdenAtencion"] != null)
                    {
                        oPa1.Codigo = ((List<OrdenAtencionBE>)Session["ListaOrdenAtencion"])[0].CodigoPaciente;
                        oPresenter.onBuscar_Paciente_porCodigo(oPa1);
                        oPresenter.onBuscar_Paciente_Detalle(oPa1);
                    }
                    if (Num != string.Empty && TipoLiq != string.Empty)
                    {
                        txt_Numero.Text = Num;
                        rbl_TipoDocumento.SelectedValue = TipoLiq;
                    }
                    EstablecerModos(0);
                    btn_Aprobar.Visible = false;
                    break;
            }
        }
        private void EstablecerModos(int action)
        {
            switch (action)
            {
                case 1:
                    rbl_TipoDocumento.Enabled =
                    txt_Observaciones.Enabled =
                    img_Buscar.Enabled =
                    UC_FechaCorte.Enabled =
                    UCBarra1.img_Volver.Enabled =
                    UCBarra1.img_Grabar.Enabled = true;

                    txt_CiaSeguros.Enabled =
                    txt_Deducibles.Enabled = txt_Empresa.Enabled =
                    txt_Estado.Enabled = txt_HistoriaClinica.Enabled =
                    txt_Numero.Enabled = txt_Paciente.Enabled =
                    txt_Poliza.Enabled = txt_PlanSalud.Enabled =
                    UC_FechaEmision.Enabled =

                    btn_Actualizar.Visible = false;
                    break;
                case 2:
                    rbl_TipoDocumento.Enabled = false;
                    txt_CiaSeguros.Enabled =
                    txt_Deducibles.Enabled = txt_Empresa.Enabled =
                    txt_Estado.Enabled = txt_HistoriaClinica.Enabled =
                    txt_Numero.Enabled = txt_Paciente.Enabled = UC_FechaEmision.Enabled =
                    txt_Poliza.Enabled = txt_PlanSalud.Enabled =
                    img_Buscar.Enabled = false;

                    UCBarra1.img_Volver.Enabled =
                    txt_Observaciones.Enabled =
                    UC_FechaCorte.Enabled =
                    UCBarra1.img_Grabar.Enabled = btn_Actualizar.Visible = true;
                    break;

                case 3://Aprobar-Rechazar        
                    rbl_TipoDocumento.Enabled = txt_CiaSeguros.Enabled =        
                    txt_Deducibles.Enabled = txt_Empresa.Enabled =        
                    txt_Estado.Enabled = txt_HistoriaClinica.Enabled =        
                    txt_Numero.Enabled = txt_Paciente.Enabled =        
                    UC_FechaEmision.Enabled = txt_Poliza.Enabled =       
                    txt_PlanSalud.Enabled =        
                    img_Buscar.Enabled = UC_FechaCorte.Enabled =       
                    UCBarra1.img_Grabar.Enabled = img_Buscar.Enabled = false;       
                    UCBarra1.img_Volver.Enabled= txt_Observaciones.Enabled = true;       
                    break; 


                default:
                    rbl_TipoDocumento.Enabled = false;
                    txt_CiaSeguros.Enabled =
                    txt_Deducibles.Enabled = txt_Empresa.Enabled =
                    txt_Estado.Enabled = txt_HistoriaClinica.Enabled =
                    txt_Numero.Enabled = txt_Paciente.Enabled = UC_FechaEmision.Enabled =
                    txt_Poliza.Enabled = txt_PlanSalud.Enabled =
                    img_Buscar.Enabled =
                    txt_Observaciones.Enabled =
                    UC_FechaCorte.Enabled =
                    btn_Actualizar.Visible =
                    UCBarra1.img_Grabar.Enabled = img_Buscar.Enabled = false;

                    UCBarra1.img_Volver.Enabled = true;
                    break;
            }
        }
        private void BuscarAtenciones()
        {
            OrdenAtencionBE oOrdAten = new OrdenAtencionBE();
            try
            {
                if (txt_CodigoPaciente.Text.Trim() != string.Empty)
                    oOrdAten.CodigoPaciente = int.Parse(txt_CodigoPaciente.Text);
                oOrdAten.FechaCorte = Convert.ToDateTime(UC_FechaCorte.TextoFecha.Text);
                oPresenter.onObterner_OrdenesAtencion_paciente(oOrdAten);
            }
            catch (Exception)
            {

            }
        }
        private void RecalcularAtenciones(int intNum, int intTipLiq)
        {
            OrdenAtencionBE oOrdAten = new OrdenAtencionBE();
            try
            {
                if (txt_CodigoPaciente.Text.Trim() != string.Empty)
                    oOrdAten.CodigoPaciente = int.Parse(txt_CodigoPaciente.Text);
                oOrdAten.FechaCorte = Convert.ToDateTime(UC_FechaCorte.TextoFecha.Text);
                oPresenter.onRecalcular_OrdenesAtencion_paciente(oOrdAten, intNum, intTipLiq);
            }
            catch (Exception)
            {

            }
        }
        private void CargarTipoDocumento()
        {
            ParametrosBE oParm = new ParametrosBE();
            oParm.NombreTabla = "TIPLIQ";
            oPresenter.onObterner_Tabla(oParm);
        }
        private void IniciarControles()
        {
            DateTime fecha = new DateTime();
            fecha = DateTime.Today.ToUniversalTime();
            UC_FechaCorte.TextoFecha.Text = fecha.ToString("dd/MM/yyyy");
            UC_FechaEmision.TextoFecha.Text = fecha.ToString("dd/MM/yyyy");
            txt_Estado.Text = string.Empty;
            txt_CiaSeguros.Text = string.Empty;
            txt_Empresa.Text = string.Empty;
            txt_HistoriaClinica.Text = string.Empty;
            txt_Paciente.Text = string.Empty;
            txt_PlanSalud.Text = string.Empty;
            txt_Poliza.Text = string.Empty;
            txt_Titular.Text = string.Empty;

            txt_TotalNeto.Text = "0.00";
            txt_TotalBruto.Text = "0.00";
            txt_Igv.Text = "0.00";
            txt_Coaseguro.Text = "0.00";
            txt_Deducibles.Text = "0.00";

            List<OrdenAtencionBE> lst = new List<OrdenAtencionBE>();
            lst.Add(new OrdenAtencionBE());
            dg_LiquidacionesDetalle.DataSource = lst;
            dg_LiquidacionesDetalle.DataBind();
            if (rbl_TipoDocumento.Items.Count > 0) rbl_TipoDocumento.Items[0].Selected = true;

            UCBarra1.img_Grabar.Visible = true;
            UCBarra1.img_Volver.Visible = true;
        }
        #endregion
        #region metodos de la interface

        public void ObtenerOrdenesAtencion(List<OrdenAtencionBE> lst)
        {
            if (lst.Count > 0)
            {
                dg_LiquidacionesDetalle.DataSource = lst;
                dg_LiquidacionesDetalle.DataBind();
                txt_TotalNeto.Text = lst[0].TotalNeto.ToString("#####.##") == string.Empty ? "0.00" : lst[0].TotalNeto.ToString("#####.##");
                txt_TotalBruto.Text = lst[0].TotalBruto.ToString("#####.##") == string.Empty ? "0.00" : lst[0].TotalBruto.ToString("#####.##");
                txt_Igv.Text = lst[0].TotalIgv.ToString("#####.##") == string.Empty ? "0.00" : lst[0].TotalIgv.ToString("#####.##");
                txt_Coaseguro.Text = lst[0].Totalcoseguro.ToString("#####.##") == string.Empty ? "0.00" : lst[0].Totalcoseguro.ToString("#####.##");
                txt_Deducibles.Text = lst[0].Deducible.ToString("#####.##") == string.Empty ? "0.00" : lst[0].Deducible.ToString("#####.##");
                txt_Estado.Text = lst[0].Estado;
                Session.Add("ListaOrdenAtencion", lst);

                if (Request.QueryString["action"].ToString().Trim() == "2")
                {
                    txt_Numero.Text = Request.QueryString["Num"].ToString().Trim();
                    rbl_TipoDocumento.SelectedValue = Request.QueryString["TipoLiq"].ToString().Trim();
                    UC_FechaEmision.TextoFecha.Text = lst[0].FechaEmision.ToString("dd/MM/yyyy");
                    UC_FechaCorte.TextoFecha.Text = lst[0].FechaCorteVista;
                    txt_Observaciones.Text = lst[0].Observacion;
                    PacienteBE oPac = new PacienteBE();
                    oPac.Codigo = lst[0].CodigoPaciente;
                    oPresenter.onBuscar_Paciente_Detalle(oPac);
                }
            }
            else
            {
                txt_TotalNeto.Text = "0.00";
                txt_TotalBruto.Text = "0.00";
                txt_Igv.Text = "0.00";
                txt_Coaseguro.Text = "0.00";
                txt_Deducibles.Text = "0.00";
            }
        }
        public void ObtenerOrdenesAtencionRecalculo(List<OrdenAtencionBE> lst)
        {
            if (lst.Count > 0)
            {
                dg_LiquidacionesDetalle.DataSource = lst;
                dg_LiquidacionesDetalle.DataBind();
                txt_TotalNeto.Text = lst[0].TotalNeto.ToString("#####.##") == string.Empty ? "0.00" : lst[0].TotalNeto.ToString("#####.##");
                txt_TotalBruto.Text = lst[0].TotalBruto.ToString("#####.##") == string.Empty ? "0.00" : lst[0].TotalBruto.ToString("#####.##");
                txt_Igv.Text = lst[0].TotalIgv.ToString("#####.##") == string.Empty ? "0.00" : lst[0].TotalIgv.ToString("#####.##");
                txt_Coaseguro.Text = lst[0].Totalcoseguro.ToString("#####.##") == string.Empty ? "0.00" : lst[0].Totalcoseguro.ToString("#####.##");
                txt_Deducibles.Text = lst[0].Deducible.ToString("#####.##") == string.Empty ? "0.00" : lst[0].Deducible.ToString("#####.##");
                txt_Estado.Text = lst[0].Estado;
                Session.Add("ListaOrdenAtencion", lst);

                if (Request.QueryString["action"].ToString().Trim() == "2")
                {
                    txt_Numero.Text = Request.QueryString["Num"].ToString().Trim();
                    rbl_TipoDocumento.SelectedValue = Request.QueryString["TipoLiq"].ToString().Trim();
                    UC_FechaEmision.TextoFecha.Text = lst[0].FechaEmision.ToString("dd/MM/yyyy");
                    txt_Observaciones.Text = lst[0].Observacion;
                    PacienteBE oPac = new PacienteBE();
                    oPac.Codigo = lst[0].CodigoPaciente;
                    oPresenter.onBuscar_Paciente_Detalle(oPac);
                }
            }
            else
            {
                txt_TotalNeto.Text = "0.00";
                txt_TotalBruto.Text = "0.00";
                txt_Igv.Text = "0.00";
                txt_Coaseguro.Text = "0.00";
                txt_Deducibles.Text = "0.00";
            }
        }
        private void ObtenerLiquidacion()
        {
            List<OrdenAtencionBE> lst = new List<OrdenAtencionBE>();
            lst = (List<OrdenAtencionBE>)Session["ListaOrdenAtencion"];
            if (lst.Count > 0)
            {
                //rbl_TipoDocumento.SelectedValue = Request.QueryString["TipoLiq"].ToString().Trim();
                UC_FechaEmision.TextoFecha.Text = lst[0].FechaEmision.ToString("dd/MM/yyyy");
                UC_FechaCorte.TextoFecha.Text = lst[0].FechaCorteVista;
                txt_Observaciones.Text = lst[0].Observacion;
                PacienteBE oPac = new PacienteBE();
                oPac.Codigo = lst[0].CodigoPaciente;
                oPresenter.onBuscar_Paciente_Detalle(oPac);
            }

        }
        public void BuscarPaciente(List<PacienteBE> lst)
        {
            if (lst.Count > 0)
            {
                txt_CiaSeguros.Text = lst[0].CodigoAseguradora.ToString();
                txt_Empresa.Text = lst[0].Empresa;
                txt_HistoriaClinica.Text = string.Empty;
                txt_PlanSalud.Text = lst[0].PlanSalud;
                txt_Poliza.Text = lst[0].Poliza;
                txt_CodigoPaciente.Text = lst[0].Codigo.ToString();
                txt_Paciente.Text = lst[0].NombreCompleto;
            }
            else
            {
                txt_CiaSeguros.Text = string.Empty;
                txt_Empresa.Text = string.Empty;
                txt_HistoriaClinica.Text = string.Empty;
                txt_PlanSalud.Text = string.Empty;
                txt_Poliza.Text = string.Empty;
                txt_CodigoPaciente.Text = string.Empty;
                txt_Paciente.Text = string.Empty;
                //IniciarControles();
                //Master.MostrarMensaje("Paciente no tiene Atenciones o no ha realizado búsqueda", TipoMensaje.Error);
                //img_Buscar.Focus();
            }
        }

        public void BuscarPacienteDetalle(List<PacienteBE> lst)
        {
            if (lst.Count > 0)
            {
                txt_CiaSeguros.Text = lst[0].Aseguradora.ToString();
                txt_Empresa.Text = lst[0].Empresa;
                txt_HistoriaClinica.Text = string.Empty;
                txt_PlanSalud.Text = lst[0].PlanSalud;
                txt_Poliza.Text = lst[0].CodigoPoliza.ToString();
                txt_CodigoPaciente.Text = lst[0].Codigo.ToString();
                txt_Paciente.Text = lst[0].NombreCompleto;
            }
        }

        public void ObtenerTabla(List<ParametrosBE> lst)
        {
            rbl_TipoDocumento.DataSource = lst;
            rbl_TipoDocumento.DataValueField = "Codigo";
            rbl_TipoDocumento.DataTextField = "DescripcionCorta";
            rbl_TipoDocumento.DataBind();
        }
        public void ModificarLiquidacion(LiquidacionBE rseult)
        {
            int intAccion = 0;
            if ((string)Session["Action"] == "update")
                intAccion = 2;
            else if ((string)Session["Action"] == "new")
                intAccion = 1;
            Session["Action"] = "update";

            EstablecerModos(2);
            LiquidacionBE oLiq = new LiquidacionBE();
            oLiq.Numero = rseult.Numero;
            oLiq.TipoLiquidacion = int.Parse(rbl_TipoDocumento.SelectedValue);
            if (oLiq.Numero > 0)
            {
                oPresenter.onObtener_Liquidacion(oLiq);
                txt_Numero.Text = rseult.Numero.ToString();
                ObtenerLiquidacion();
                EstablecerModos(0);
                string mensaje = string.Empty;
                if (intAccion == 1)
                    mensaje = "Se Registró la " + (rbl_TipoDocumento.SelectedValue == "1" ? "Pre-liquidación" : "Liquidación") + " Nro." + rseult.Numero.ToString();
                else if (intAccion == 2)
                    mensaje = "Se Modificó la " + (rbl_TipoDocumento.SelectedValue == "1" ? "Pre-liquidación" : "Liquidación") + " Nro." + rseult.Numero.ToString();

                ScriptManager.RegisterStartupScript(this, typeof(Page), "Envio1", "Mostrarmensaje('" + mensaje + "');", true);
            }
        }

        #endregion
        #region Mostrar Mensaje
        public void MostrarMensajeError(string Mensaje)
        {
            Master.MostrarMensaje(Mensaje.Trim(), TipoMensaje.Error);
        }
        #endregion
    }
}
